package ar.utn.jess.domain;

import java.util.Date;

import ar.utn.jess.annotation.Entity;
import ar.utn.jess.annotation.Field;
import ar.utn.jess.common.AbstractEntity;
import ar.utn.jess.common.SelectorData;
import ar.utn.jess.common.jqp.AttributeSqlHandler;
import ar.utn.jess.common.jqp.JQFilter;
import ar.utn.jess.domain.enums.Estado;
import ar.utn.jess.domain.enums.EstadoChofer;

@Entity(tableName="viaje")
public class Viaje extends AbstractEntity{

	private Chofer chofer;
	private Ubicacion origen;
	private Ubicacion destino;
	
	private String origen_str;
	private String destino_str;
	
	private Barrio barrioOrig;
	private Barrio barrioDest;
	
	private String pasajero;
	private Estado estado;
	
	private Date fecha_ped;
	
	public Viaje() {
		
	}
	
	public Viaje(Chofer chofer, String pasajero, String origen, String destino, Barrio barrioOrig, Barrio barrioDest) {
		
		this.chofer = chofer;
		this.fecha_ped = new Date();
		this.estado = Estado.POR_ASIGNAR;
		this.pasajero = pasajero;
		this.origen_str = origen;
		this.destino_str = destino;
		this.barrioOrig = barrioOrig;
		this.barrioDest = barrioDest;
	}
	
	
	@Field(columnName="idchofer", isForeignKey=true)
	public Chofer getChofer() {
		return chofer;
	}
	
	public void setChofer(Chofer chofer) {
		this.chofer = chofer;
	}
	
	@Field(columnName="estado")
	public Estado getEstado() {
		return estado;
	}
	
	public void setEstado(Estado estado) {
		this.estado = estado;
	}
	
	@Field(columnName="pasajero")
	public String getPasajero() {
		return pasajero;
	}
	
	public void setPasajero(String pasajero) {
		this.pasajero = pasajero;
	}
	
	@Field(columnName="fecha_ped")
	public Date getFecha_ped() {
		return fecha_ped;
	}
	
	public void setFecha_ped(Date fecha_ped) {
		this.fecha_ped = fecha_ped;
	}
	
	
	//-------------------------------------------------------//


	@Override
	protected String getSqlForSelector(SelectorData selectorData) {
		JQFilter filter = selectorData.getGridInfo().getFilter();
		String query = "select v.id, idchofer, pasajero, v.estado, origen, destino, IF(STRCMP(estadoChofer,'DESLOGUEADO'),'','*') as estadoChofer from viaje v join chofer c on c.id = v.idchofer";
		
		if(filter != null)
			query += " where " + filter.getAsSql(Chofer.class, new AttributeSqlHandler());
		
//		query += " order by id desc";
				
		return query;
	}


	@Override
	protected String getSqlForAutocompleteOptions(String term) {
		// TODO Auto-generated method stub
		return null;
	}


	@Override
	protected String getSqlForOption(String where) {
		// TODO Auto-generated method stub
		return null;
	}

	//--------------------------------------------------------------//

	public void actualizarEstado(Estado estadoViaje) {
		this.estado = estadoViaje;
	}

	@Field(columnName="origen")
	public String getOrigen_str() {
		return origen_str;
	}

	public void setOrigen_str(String origen_str) {
		this.origen_str = origen_str;
	}

	@Field(columnName="destino")
	public String getDestino_str() {
		return destino_str;
	}

	public void setDestino_str(String destino_str) {
		this.destino_str = destino_str;
	}

	@Field(columnName="idbarrio_orig", isForeignKey=true)
	public Barrio getBarrioOrig() {
		return barrioOrig;
	}

	public void setBarrioOrig(Barrio barrioOrig) {
		this.barrioOrig = barrioOrig;
	}

	@Field(columnName="idbarrio_dest", isForeignKey=true)
	public Barrio getBarrioDest() {
		return barrioDest;
	}

	public void setBarrioDest(Barrio barrioDest) {
		this.barrioDest = barrioDest;
	}

	public void loadChofer() {

		if(getChofer()!=null && getChofer().getId()!=null) {
			this.chofer = Chofer.findById(Chofer.class, getChofer().getId());
		}
	}

	public void reasignarChofer(Chofer nuevoChofer) {
		
		if(getChofer()!=null) {
			
		}
		
		this.chofer = nuevoChofer;
		this.estado = Estado.POR_ASIGNAR;
	}
}
